#include "kernel.h"

CKernel::CKernel( void )
{
	
}

CKernel::~CKernel( void )
{

}

int CKernel::Execute()
{
	while( !m_oTaskList.empty() )
	{
		taskList::iterator i = m_oTaskList.begin();

		while(i != m_oTaskList.end())
		{
			if( (*i)->CanKill() )
			{
				(*i)->Stop();
				i = m_oTaskList.erase( i );
			}else
			{
				(*i)->Update();
				i++;
			}
		}
	}
	return 0;
}

bool CKernel::AddTask( GCPtr<IKernelTask> &task )
{
	m_oTaskList.push_back( task );
	return m_oTaskList.back()->Start();
}

void CKernel::RemoveTask( GCPtr<IKernelTask> &pgTask )
{
	taskList::iterator i = m_oTaskList.begin();
	for( ; i != m_oTaskList.end(); ++i )
	{
		if( pgTask == *i )
		{
			(*i)->FlagForKill();
			break;
		}
	}
}

void CKernel::RemoveAllTasks()
{
	taskList::iterator i = m_oTaskList.begin();
	for ( ; m_oTaskList.end() != i; i++)
	{
		RemoveTask(*i);
	}
}